module qmoduleq_o;

import std.stdio;

import qmoduleq_g;

void o(char g, ubyte q=0x07)
{
 switch((q&0x80)/0x40+(q&0x08)/0x08)
 { // mode
  case 0: // none
   writef("\033[0;");
   break;
  case 1: // reverse
   writef("\033[7;");
   break;
  case 2: // bright
   writef("\033[1;");
   break;
  case 3: // dim
   writef("\033[2;");
   break;
 }
 switch(q/16%8)
 { // background
  case 0: // K
   writef("40;");
   break;
  case 1: // R
   writef("41;");
   break;
  case 2: // G
   writef("42;");
   break;
  case 3: // Y
   writef("43;");
   break;
  case 4: // B
   writef("44;");
   break;
  case 5: // M
   writef("45;");
   break;
  case 6: // C
   writef("46;");
   break;
  case 7: // W
   writef("47;");
   break;
 }
 switch(q%8)
 { // foreground
  case 0: // K
   writef("30m");
   break;
  case 1: // R
   writef("31m");
   break;
  case 2: // G
   writef("32m");
   break;
  case 3: // Y
   writef("33m");
   break;
  case 4: // B
   writef("34m");
   break;
  case 5: // M
   writef("35m");
   break;
  case 6: // C
   writef("36m");
   break;
  case 7: // W
   writef("37m");
   break;
 }
 writef("%s",g);
}

void oo(string z, bool v, bool f=true, byte n=1)
{
 g.o.g();
 for(int i=0;i<z.length;i++)
 {
  o(z[i]);
  for (int j=0;j<n;j++)
   g.o.g(g.o.n(v,f)); // g.o.n  v f [ww] # advance cursor position.
 }
 return;
}
